package com.file.homework;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/**
 * @author げっしょく
 * @date 2021/7/31
 */
public class Demo5 {
    public static void main(String[] args) throws IOException {
               /*
         定义任意字符串数组
    统计该数组中所有字符出现的次数，将统计结果输出到当前模块下 count.txt文件中
    举例：
    String[] str = {"hello","world","java","heiheihei"};

    count.txt:
        h:4
        e:4
        l:3
        o:2
        w:1
        r:1
        d:1
        j:1
        a:2
        i:3
        v:1

    提示： 在输出的内容后面加入：\r\n 就有换行效果
 */
               //创建一个需要统计的字符串
        String[] str = {"hello","world","java","heiheihei"};
        //如果路径存在就代表文件的路径
        // 如果不存在，就创建一个同名的文件
        FileOutputStream fos = new FileOutputStream("Day12\\count.txt");
        //创建一个HashMap对象  存放出现过的字符和次数
        HashMap<Character , Integer> hs = new HashMap<>();
        //遍历字符数组
        for (String s : str) {
            //使每个字符串变成字符数组
            char[] c = s.toCharArray();
            //遍历字符数组
            for (int i = 0; i < c.length; i++) {
                //判断该字符是个存在Hash Map集合内
                //如果在就使其值加1
                //不在就加入集合 其出现次数的初始值为1
                if (hs.containsKey(c[i])){
                    Integer in = hs.get(c[i]);
                    in++;
                    hs.put(c[i] , in);
                }else {
                    hs.put(c[i] , 1);
                }
            }
        }
        //获取HashMap的每个键值对
        Set<Map.Entry<Character, Integer>> entries = hs.entrySet();
        //遍历键值对集合
        for (Map.Entry<Character, Integer> en : entries) {
            //取出其键写入文档
            Character key = en.getKey();
            fos.write(key);
            fos.write(':');
            //获取其值
            //+48是因为存入文档的使其数字的对应字符
            //+48存入进去就是其在ASCLL的对应的字符
            Integer value = en.getValue();
            int a = value + 48;
            fos.write(a);
            //存入一个后就需要换行
            //但是换行符是字符串
            //所以需要调用字符串的转为bytes的方法
            fos.write("\n\t".getBytes());
        }
    }
}
